using System;
using System.Linq;
using System.Runtime.Serialization;
using System.Data.Objects.DataClasses;
using System.Xml.Serialization;
using System.ComponentModel;
using System.Collections.Generic;
using System.Text;
using Acme.Northwind.EFDAL.Interfaces;

namespace Acme.Northwind.EFDAL.Interfaces.Entity
{
	/// <summary>
	/// This is the base interface for the EF entity for Customer
	/// </summary>
	public partial interface ICustomer : nHydrate.EFCore.DataAccess.IBusinessObject, nHydrate.EFCore.DataAccess.INHEntityObject, System.ComponentModel.IDataErrorInfo, System.IEquatable<Acme.Northwind.EFDAL.Interfaces.Entity.ICustomer>, nHydrate.EFCore.DataAccess.IAuditable
	{
		#region Properties

		/// <summary>
		/// The property that maps back to the database 'Customers.Address' field
		/// </summary>
		[System.ComponentModel.Browsable(true)]
		[System.ComponentModel.DisplayName("Address")]
		string Address { get; set; }

		/// <summary>
		/// The property that maps back to the database 'Customers.City' field
		/// </summary>
		[System.ComponentModel.Browsable(true)]
		[System.ComponentModel.DisplayName("City")]
		string City { get; set; }

		/// <summary>
		/// The property that maps back to the database 'Customers.CompanyName' field
		/// </summary>
		[System.ComponentModel.Browsable(true)]
		[System.ComponentModel.DisplayName("CompanyName")]
		string CompanyName { get; set; }

		/// <summary>
		/// The property that maps back to the database 'Customers.ContactName' field
		/// </summary>
		[System.ComponentModel.Browsable(true)]
		[System.ComponentModel.DisplayName("ContactName")]
		string ContactName { get; set; }

		/// <summary>
		/// The property that maps back to the database 'Customers.ContactTitle' field
		/// </summary>
		[System.ComponentModel.Browsable(true)]
		[System.ComponentModel.DisplayName("ContactTitle")]
		string ContactTitle { get; set; }

		/// <summary>
		/// The property that maps back to the database 'Customers.Country' field
		/// </summary>
		[System.ComponentModel.Browsable(true)]
		[System.ComponentModel.DisplayName("Country")]
		string Country { get; set; }

		/// <summary>
		/// The property that maps back to the database 'Customers.CustomerID' field
		/// </summary>
		[System.ComponentModel.Browsable(true)]
		[System.ComponentModel.DataAnnotations.Key()]
		[System.ComponentModel.ReadOnly(true)]
		[System.ComponentModel.DisplayName("CustomerID")]
		string CustomerID { get; set; }

		/// <summary>
		/// The property that maps back to the database 'Customers.Fax' field
		/// </summary>
		[System.ComponentModel.Browsable(true)]
		[System.ComponentModel.DisplayName("Fax")]
		string Fax { get; set; }

		/// <summary>
		/// The property that maps back to the database 'Customers.Phone' field
		/// </summary>
		[System.ComponentModel.Browsable(true)]
		[System.ComponentModel.DisplayName("Phone")]
		string Phone { get; set; }

		/// <summary>
		/// The property that maps back to the database 'Customers.PostalCode' field
		/// </summary>
		[System.ComponentModel.Browsable(true)]
		[System.ComponentModel.DisplayName("PostalCode")]
		string PostalCode { get; set; }

		/// <summary>
		/// The property that maps back to the database 'Customers.Region' field
		/// </summary>
		[System.ComponentModel.Browsable(true)]
		[System.ComponentModel.DisplayName("Region")]
		string Region { get; set; }

		/// <summary>
		/// The audit field for the 'Created By' column.
		/// </summary>
		[System.ComponentModel.Browsable(false)]
		string CreatedBy { get; }

		/// <summary>
		/// The audit field for the 'Created Date' column.
		/// </summary>
		[System.ComponentModel.Browsable(false)]
		DateTime? CreatedDate { get; }

		/// <summary>
		/// The audit field for the 'Modified By' column.
		/// </summary>
		[System.ComponentModel.Browsable(false)]
		string ModifiedBy { get; }

		/// <summary>
		/// The audit field for the 'Modified Date' column.
		/// </summary>
		[System.ComponentModel.Browsable(false)]
		DateTime? ModifiedDate { get; }

		#endregion

		#region Navigation Properties

		/// <summary>
		/// The back navigation definition for walking Customer->CustomerCustomerDemo
		/// </summary>
		[XmlIgnoreAttribute()]
		[SoapIgnoreAttribute()]
		[DataMemberAttribute()]
		[EdmRelationshipNavigationPropertyAttribute("Acme.Northwind.EFDAL.Interfaces.Entity", "FK__CustomerCustomerDemo_Customer", "CustomerCustomerDemoList")]
		ICollection<Acme.Northwind.EFDAL.Interfaces.Entity.ICustomerCustomerDemo> CustomerCustomerDemoList { get; }

		/// <summary>
		/// The back navigation definition for walking Customer->Order
		/// </summary>
		[XmlIgnoreAttribute()]
		[SoapIgnoreAttribute()]
		[DataMemberAttribute()]
		[EdmRelationshipNavigationPropertyAttribute("Acme.Northwind.EFDAL.Interfaces.Entity", "FK__Order_Customer", "OrderList")]
		ICollection<Acme.Northwind.EFDAL.Interfaces.Entity.IOrder> OrderList { get; }

		#endregion

	}

}

#region Metadata Class

namespace Acme.Northwind.EFDAL.Interfaces.Entity.Metadata
{
	/// <summary>
	/// Metadata class for the 'Customer' entity
	/// </summary>
	public partial class CustomerMetadata : nHydrate.EFCore.DataAccess.IMetadata
	{
		#region Properties

		/// <summary>
		/// Metadata information for the 'Address' parameter
		/// </summary>
		[System.ComponentModel.DataAnnotations.StringLength(60, ErrorMessage = "The property 'Address' has a maximum length of 60")]
		[System.ComponentModel.DataAnnotations.DisplayAttribute(Description = "", Name = "Address", AutoGenerateField = true)]
		public object Address;

		/// <summary>
		/// Metadata information for the 'City' parameter
		/// </summary>
		[System.ComponentModel.DataAnnotations.StringLength(15, ErrorMessage = "The property 'City' has a maximum length of 15")]
		[System.ComponentModel.DataAnnotations.DisplayAttribute(Description = "", Name = "City", AutoGenerateField = true)]
		public object City;

		/// <summary>
		/// Metadata information for the 'CompanyName' parameter
		/// </summary>
		[System.ComponentModel.DataAnnotations.Required(ErrorMessage = "'CompanyName' is required.")]
		[System.ComponentModel.DataAnnotations.StringLength(40, ErrorMessage = "The property 'CompanyName' has a maximum length of 40")]
		[System.ComponentModel.DataAnnotations.DisplayAttribute(Description = "", Name = "CompanyName", AutoGenerateField = true)]
		public object CompanyName;

		/// <summary>
		/// Metadata information for the 'ContactName' parameter
		/// </summary>
		[System.ComponentModel.DataAnnotations.StringLength(30, ErrorMessage = "The property 'ContactName' has a maximum length of 30")]
		[System.ComponentModel.DataAnnotations.DisplayAttribute(Description = "", Name = "ContactName", AutoGenerateField = true)]
		public object ContactName;

		/// <summary>
		/// Metadata information for the 'ContactTitle' parameter
		/// </summary>
		[System.ComponentModel.DataAnnotations.StringLength(30, ErrorMessage = "The property 'ContactTitle' has a maximum length of 30")]
		[System.ComponentModel.DataAnnotations.DisplayAttribute(Description = "", Name = "ContactTitle", AutoGenerateField = true)]
		public object ContactTitle;

		/// <summary>
		/// Metadata information for the 'Country' parameter
		/// </summary>
		[System.ComponentModel.DataAnnotations.StringLength(15, ErrorMessage = "The property 'Country' has a maximum length of 15")]
		[System.ComponentModel.DataAnnotations.DisplayAttribute(Description = "", Name = "Country", AutoGenerateField = true)]
		public object Country;

		/// <summary>
		/// Metadata information for the 'CustomerID' parameter
		/// </summary>
		[System.ComponentModel.DataAnnotations.Required(ErrorMessage = "'CustomerID' is required.")]
		[System.ComponentModel.DataAnnotations.Key()]
		[System.ComponentModel.DataAnnotations.Editable(false)]
		[System.ComponentModel.ReadOnly(true)]
		[System.ComponentModel.DataAnnotations.StringLength(5, ErrorMessage = "The property 'CustomerID' has a maximum length of 5")]
		[System.ComponentModel.DataAnnotations.DisplayAttribute(Description = "", Name = "CustomerID", AutoGenerateField = true)]
		public object CustomerID;

		/// <summary>
		/// Metadata information for the 'Fax' parameter
		/// </summary>
		[System.ComponentModel.DataAnnotations.StringLength(24, ErrorMessage = "The property 'Fax' has a maximum length of 24")]
		[System.ComponentModel.DataAnnotations.DisplayAttribute(Description = "", Name = "Fax", AutoGenerateField = true)]
		public object Fax;

		/// <summary>
		/// Metadata information for the 'Phone' parameter
		/// </summary>
		[System.ComponentModel.DataAnnotations.StringLength(24, ErrorMessage = "The property 'Phone' has a maximum length of 24")]
		[System.ComponentModel.DataAnnotations.DisplayAttribute(Description = "", Name = "Phone", AutoGenerateField = true)]
		public object Phone;

		/// <summary>
		/// Metadata information for the 'PostalCode' parameter
		/// </summary>
		[System.ComponentModel.DataAnnotations.StringLength(10, ErrorMessage = "The property 'PostalCode' has a maximum length of 10")]
		[System.ComponentModel.DataAnnotations.DisplayAttribute(Description = "", Name = "PostalCode", AutoGenerateField = true)]
		public object PostalCode;

		/// <summary>
		/// Metadata information for the 'Region' parameter
		/// </summary>
		[System.ComponentModel.DataAnnotations.StringLength(15, ErrorMessage = "The property 'Region' has a maximum length of 15")]
		[System.ComponentModel.DataAnnotations.DisplayAttribute(Description = "", Name = "Region", AutoGenerateField = true)]
		public object Region;

		/// <summary>
		/// Metadata information for the 'CreatedBy' parameter
		/// </summary>
		[System.ComponentModel.DataAnnotations.StringLength(100, ErrorMessage = "The property 'CreatedBy' has a maximum length of 100")]
		[System.ComponentModel.ReadOnly(true)]
		public object CreatedBy;

		/// <summary>
		/// Metadata information for the 'CreatedDate' parameter
		/// </summary>
		[System.ComponentModel.ReadOnly(true)]
		public object CreatedDate;

		/// <summary>
		/// Metadata information for the 'ModifiedBy' parameter
		/// </summary>
		[System.ComponentModel.DataAnnotations.StringLength(100, ErrorMessage = "The property 'ModifiedBy' has a maximum length of 100")]
		[System.ComponentModel.ReadOnly(true)]
		public object ModifiedBy;

		/// <summary>
		/// Metadata information for the 'ModifiedDate' parameter
		/// </summary>
		[System.ComponentModel.ReadOnly(true)]
		public object ModifiedDate;

		/// <summary>
		/// Metadata information for the 'Timestamp' parameter
		/// </summary>
		[System.ComponentModel.DataAnnotations.Timestamp()]
		[System.ComponentModel.ReadOnly(true)]
		public object Timestamp;

		#endregion

	}

}

#endregion

